Toeplitz matrix¶
Time: O(MxN); Space: O(1); easy
A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element. Now given an M x N matrix, return True if and only if the matrix is Toeplitz.
Example 1:
Input: matrix =
[
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]
]
Output: True
Explanation:
In the above grid, the diagonals are: [9], [5, 5], [1, 1, 1], [2, 2, 2], [3, 3], [4].
In each diagonal all elements are the same, so the answer is True.
Example 2:
Input: matrix =
[
[1, 2],
[2, 2]
]
Output: False
Explanation:
The diagonal [1, 2]
Notes:
matrix will be a 2D array of integers.
matrix will have a number of rows and columns in range [1, 20].
matrix[i][j] will be integers in range [0, 99].
[1]:
class Solution1(object):
def isToeplitzMatrix(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: bool
"""
return all(i == 0 or j == 0 or matrix[i-1][j-1] == val
for i, row in enumerate(matrix)
for j, val in enumerate(row))
[2]:
matrix = [
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]
]
s = Solution1()
assert s.isToeplitzMatrix(matrix) == True
matrix = [
[1, 2],
[2, 2]
]
s = Solution1()
assert s.isToeplitzMatrix(matrix) == False
[3]:
class Solution2(object):
def isToeplitzMatrix(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: bool
"""
for row_index, row in enumerate(matrix):
for digit_index, digit in enumerate(row):
if not row_index or not digit_index:
continue
if matrix[row_index - 1][digit_index - 1] != digit:
return False
return True
[4]:
matrix = [
[1, 2, 3, 4],
[5, 1, 2, 3],
[9, 5, 1, 2]
]
s = Solution2()
assert s.isToeplitzMatrix(matrix) == True
matrix = [
[1, 2],
[2, 2]
]
s = Solution2()
assert s.isToeplitzMatrix(matrix) == False